<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use \DB; 

class KindeditController extends CommonController {

// 	public function __construct() {

// 		//parent::__construct();
		
// 		import('ORG.Util.JSON');
// 		import('ORG.Util.Image');
// 	}

	public function postUpload(Request $request) {

		$ext_arr = array(
				'image' => array(
						'gif',
						'jpg',
						'jpeg',
						'png',
						'bmp',
				),
				'flash' => array(
						'swf',
						'flv'
				),
				'media' => array(
						'swf',
						'flv',
						'mp3',
						'wav',
						'wma',
						'wmv',
						'mid',
						'avi',
						'mpg',
						'asf',
						'rm',
						'rmvb'
				),
				'file' => array(
						'doc',
						'docx',
						'xls',
						'xlsx',
						'ppt',
						'htm',
						'html',
						'txt',
						'zip',
						'rar',
						'gz',
						'bz2'
				)
		);
//		define('DS', DIRECTORY_SEPARATOR);
		$php_path = dirname(__FILE__) . DS;
		// change php_url
		//$php_url = dirname($_SERVER['PHP_SELF']) . '/';
// 		if(C('URL_MODEL') == 3){
// 			$php_url = dirname($_SERVER['PHP_SELF']) . '/';
// 		}else if(C('URL_MODEL') == 1){
// 			$php_url = __ROOT__. '/';
// 		}
		$php_url = "";
		//文件保存目录路径
		$save_path = config('upload.uploadDir');
		
		//文件保存目录URL
		$save_url = $php_url . '' . '/attached/';
		
		//最大文件大小
		$max_size = 500000000;
		
		$save_path = realpath($save_path) . DS;
		
		//PHP上传失败
		if (!empty($_FILES['imgFile']['error'])) {
			switch ($_FILES['imgFile']['error']) {
				case '1':
					$error = '超过php.ini允许的大小。';
					break;
				case '2':
					$error = '超过表单允许的大小。';
					break;
				case '3':
					$error = '图片只有部分被上传。';
					break;
				case '4':
					$error = '请选择图片。';
					break;
				case '6':
					$error = '找不到临时目录。';
					break;
				case '7':
					$error = '写文件到硬盘出错。';
					break;
				case '8':
					$error = 'File upload stopped by extension。';
					break;
				case '999':
				default:
					$error = '未知错误。';
			}
			$this->alert($error);
		}
		
		//有上传文件时
		if (empty($_FILES) === false) {
			//原文件名
			$file_name = $_FILES['imgFile']['name'];
			//服务器上临时文件名
			$tmp_name = $_FILES['imgFile']['tmp_name'];
			//文件大小
			$file_size = $_FILES['imgFile']['size'];
			//检查文件名
			if (!$file_name) {
				$this->alert("请选择文件。");
			}
			//检查目录
			if (@is_dir($save_path) === false) {
				$this->alert("上传目录不存在。");
			}
			//检查目录写权限
			if (@is_writable($save_path) === false) {
				$this->alert("上传目录没有写权限。");
			}
			//检查是否已上传
			if (@is_uploaded_file($tmp_name) === false) {
				$this->alert("临时文件可能不是上传文件。");
			}
			//检查文件大小
			if ($file_size > $max_size) {
				$this->alert("上传文件大小超过限制。");
			}
			//获得文件扩展名
			$temp_arr = explode(".", $file_name);
			$file_ext = array_pop($temp_arr);
			$file_ext = trim($file_ext);
			$file_ext = strtolower($file_ext);
			//检查扩展名
			$isAllow = false;
			foreach ($ext_arr as $key => $val) {
				if (in_array($file_ext, $val)) {
					$isAllow = true;
					$dir_name = $key;
					break;
				}
			}
			
			if (!$isAllow) {
				$this->alert("上传文件扩展名是不允许的扩展名。");
			}
			
			//创建文件夹
			if ($dir_name !== '') {
				$save_path .= $dir_name . "/";
				$save_url .= $dir_name . "/";
				if (!file_exists($save_path)) {
					mkdir($save_path);
					mkdir($save_path."_large");
					mkdir($save_path."_thumb");
				}
			}
			$ymd = date("Ymd");
			$save_path .= $ymd . "/";
			$save_url .= $ymd . "/";
			if (!file_exists($save_path)) {
				mkdir($save_path);
				mkdir($save_path."_large");
				mkdir($save_path."_thumb");
			}
			//新文件名
			$new_file_name = date("YmdHis") . '_' . rand(10000, 99999) . '.' . $file_ext;
			//移动文件
			$file_path = $save_path . $new_file_name;
			
			if (move_uploaded_file($tmp_name, $file_path) === false) {
				$this->alert("上传文件失败。");
			}
			// 生成缩略图
// 			if (in_array($ext_arr['image'], $file_ext)) {
				
// 			}
			@chmod($file_path, 0644);
			$file_url = $save_url . $new_file_name;
			
			//生成大图小图
			//大
			$imageInfo = getimagesize($file_path);
			$lh = $imageInfo[1] /( $imageInfo[0] / 358);
			$large_url = $save_path ."_large/". $new_file_name;
			$this->img_create_small($file_path, 358, $lh, $large_url);
			//小
			$th = $imageInfo[1] /( $imageInfo[0] / 158);
			$thumb_url = $save_path ."_thumb/". $new_file_name;
			$this->img_create_small($file_path, 158, $th, $thumb_url);
			
			header('Content-type: text/html; charset=UTF-8');
			echo json_encode(array(
					'error' => 0,
					'url' =>config('system.wjtrUrl').str_replace('/public/','',$file_url),
					'path'=>$file_path
			));
			exit();
		}
	}

	public function getManager() {

		$ext_arr = array(
				'image' => array(
						'gif',
						'jpg',
						'jpeg',
						'png',
						'bmp',
				),
				'flash' => array(
						'swf',
						'flv'
				),
				'media' => array(
						'swf',
						'flv',
						'mp3',
						'wav',
						'wma',
						'wmv',
						'mid',
						'avi',
						'mpg',
						'asf',
						'rm',
						'rmvb'
				),
				'file' => array(
						'doc',
						'docx',
						'xls',
						'xlsx',
						'ppt',
						'htm',
						'html',
						'txt',
						'zip',
						'rar',
						'gz',
						'bz2'
				)
		);
		
		$php_path = dirname(__FILE__) . DS;
		$php_url = '/';
		
		//根目录路径，可以指定绝对路径，比如 /var/www/attached/
		$root_path = realpath(config('upload.uploadDir')) . DS;
		//根目录URL，可以指定绝对路径，比如 http://www.yoursite.com/attached/
		$root_url = $php_url . '/attached/';
		
		//目录名
		$dir_name = empty($_GET['dir']) ? '' : trim($_GET['dir']);
		if (!in_array($dir_name, array(
				'',
				'image',
				'flash',
				'media',
				'file'
		))) {
			echo "Invalid Directory name.";
			exit();
		}
		if ($dir_name !== '') {
			$root_path .= $dir_name . "/";
			$root_url .= $dir_name . "/";
			if (!file_exists($root_path)) {
				mkdir($root_path);
			}
		}
		
		// 根据path参数，设置各路径和URL
		if (empty($_GET['path'])) {
			$current_path = realpath($root_path) . "/";
			// 			$current_path = $root_path;
			$current_url = $root_url;
			$current_dir_path = '';
			$moveup_dir_path = '';
		}
		else {
			$current_path = realpath($root_path) . '/' . $_GET['path'];
// 			$current_path = $root_path . '/' . $_GET['path'];
			$current_url = $root_url . $_GET['path'];
			$current_dir_path = $_GET['path'];
			$moveup_dir_path = preg_replace('/(.*?)[^\/]+\/$/', '$1', $current_dir_path);
		}
		
		// 排序形式，name or size or type
		$GLOBALS['order'] = empty($_GET['order']) ? 'name' : strtolower($_GET['order']);
		// 不允许使用..移动到上一级目录
		
		if (preg_match("/\.\./", $current_path)) {
			echo 'Access is not allowed.';
			exit();
		}
		// 最后一个字符不是/
		if (!preg_match("/\/$/", $current_path)) {
			echo 'Parameter a is not valid.';
			exit();
		}
		// 目录不存在或不是目录
		if (!file_exists($current_path) || !is_dir($current_path)) {
			echo 'Directory does not exist.';
			exit();
		}
		
		// 遍历目录取得文件信息
		$file_list = array();
		if ($handle = opendir($current_path)) {
			$i = 0;
			while (false !== ($filename = readdir($handle))) {
				if ($filename{0} == '.')
					continue;
				$file = $current_path . $filename;
				if (is_dir($file)) {
					$file_list[$i]['is_dir'] = true; // 是否文件夹
					$file_list[$i]['has_file'] = (count(function_exists("scandir") ? scandir($file) : myScandir($file)) > 2); // 文件夹是否包含文件
					$file_list[$i]['filesize'] = 0; // 文件大小
					$file_list[$i]['is_photo'] = false; // 是否图片
					$file_list[$i]['filetype'] = ''; // 文件类别，用扩展名判断
				}
				else {
					$file_list[$i]['is_dir'] = false;
					$file_list[$i]['has_file'] = false;
					$file_list[$i]['filesize'] = filesize($file);
					$file_list[$i]['dir_path'] = '';
					$file_ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
					$file_list[$i]['is_photo'] = in_array($file_ext, $ext_arr);
					$file_list[$i]['filetype'] = $file_ext;
				}
				$file_list[$i]['filename'] = $filename; // 文件名，包含扩展名
				$file_list[$i]['datetime'] = date('Y-m-d H:i:s', filemtime($file)); // 文件最后修改时间
				$i++;
			}
			closedir($handle);
		}
		usort($file_list, "cmp_func");
		
		$result = array();
		//相对于根目录的上一级目录
		$result['moveup_dir_path'] = $moveup_dir_path;
		//相对于根目录的当前目录
		$result['current_dir_path'] = $current_dir_path;
		//当前目录的URL
		$result['current_url'] = $current_url;
		//文件数
		$result['total_count'] = count($file_list);
		//文件列表数组
		$result['file_list'] = $file_list;
		
		//输出JSON字符串
		header('Content-type: application/json; charset=UTF-8');
		echo json_encode($result);
		exit();
	}

	private function alert($msg) {

		header('Content-type: text/html; charset=UTF-8');
		echo json_encode(array(
				'error' => 1,
				'message' => $msg
		));
		exit();
	}
	
	static function img_create_small($big_img, $width, $height, $small_img) { // 原始大图地址，缩略图宽度，高度，缩略图地址
		$imgage = getimagesize($big_img); // 得到原始大图片
		switch ($imgage[2]) { // 图像类型判断
			case 1:
				$im = imagecreatefromgif($big_img);
				break;
			case 2:
				$im = imagecreatefromjpeg($big_img);
				break;
			case 3:
				$im = imagecreatefrompng($big_img);
				break;
		}
		$src_W = $imgage[0]; // 获取大图片宽度
		$src_H = $imgage[1]; // 获取大图片高度
		$tn = imagecreatetruecolor($width, $height); // 创建缩略图
		imagecopyresampled($tn, $im, 0, 0, 0, 0, $width, $height, $src_W, $src_H); // 复制图像并改变大小
		imagejpeg($tn, $small_img); // 输出图像
	}
}
?>